3ae85c9388c02647d242cf2ebb07d6cc1cecca8d,src/main/org/codehaus/groovy/transform/AutoCloneASTTransformation.java,AutoCloneASTTransformation,createCloneCopyConstructor,#ClassNode#List#List#,144
Before Change
String name = fieldNode.getName();
if (excludes.contains(name)) continue;
Expression direct = propX(other, name);
Expression cloned = callX(direct, "clone");
Expression to = propX(varX("this"), name);
Statement assignCloned = assignS(to, cloned);
Statement assignDirect = assignS(to, direct);
initBody.addStatement(ifElseS(isInstanceOfX(direct, CLONEABLE_TYPE), assignCloned, assignDirect));
}
ClassNode[] exceptions = {make(CloneNotSupportedException.class)};
cNode.addConstructor(ACC_PROTECTED, params(initParam), ClassNode.EMPTY_ARRAY, initBody);
After Change
for (FieldNode fieldNode : list) {
String name = fieldNode.getName();
if (excludes.contains(name)) continue;
ClassNode fieldType = fieldNode.getType();
Expression direct = propX(other, name);
Expression to = propX(varX("this"), name);
Statement assignDirect = assignS(to, direct);
Statement assignCloned = assignS(to, castX(fieldType, callX(direct, "clone")));
Statement assignClonedDynamic = assignS(to, castX(fieldType, callCloneDynamicX(direct)));
if (isOrImplements(fieldType, CLONEABLE_TYPE)) {
initBody.addStatement(assignCloned);
} else if (!possiblyCloneable(fieldType)) {
initBody.addStatement(assignDirect);
} else {
initBody.addStatement(ifElseS(isInstanceOfX(direct, CLONEABLE_TYPE), assignClonedDynamic, assignDirect));
}
}
ClassNode[] exceptions = {make(CloneNotSupportedException.class)};